﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using ITKRestaurant.RestaurantServiceReference;
using MyWCFServices.RealRestaurantService;
using System.ServiceModel;

namespace ITKRestaurant
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        String etteremNev;
        bool isClientInitialized = false;
        RestaurantServiceClient client = null;
        Exception clientErrorException = null;
        EtteremGUI etterem = null;
        AdminGUI admin = null;

        public MainWindow()
        {
            InitializeComponent();
            
            //DataBase db = new DataBase();
            this.etteremNev = "Marika néni kajáldája";

        }

        public RestaurantServiceClient getClient()
        {
            return this.client;
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            admin = new AdminGUI(client, this);
            admin.Title = "Adminisztráció";
            admin.Show();
            this.Hide();
        }

        private bool InitializeClient()
        {
            // kapcsolati protokoll (kötés) létrehozása
            BasicHttpBinding binding = new BasicHttpBinding();
            binding.AllowCookies = true;
            //1 perces timeout
            binding.CloseTimeout = new TimeSpan(0, 1, 0);
            binding.ReceiveTimeout = new TimeSpan(0, 1, 0);
            EndpointAddress endPoint = null;
            try
            {
                Console.WriteLine("Kapcsolódás a szerverhez...");
                endPoint = new EndpointAddress("http://127.0.0.1:8080/restaurant.svc"); // végpont létrehozása
                this.client = new RestaurantServiceClient(binding, endPoint); // kliens létrehozása
                bool ret = this.client.TestConnection();    

                if (ret)
                {
                    Console.WriteLine("A kapcsolat létrejött.");
                    return true;
                }
                else return false;
            }

            catch (Exception ex)
            {
                Console.WriteLine("Hiba történt: " + ex.Message);
                this.clientErrorException = ex;
                return false;
            }
            
            
        }


        private void button2_Click(object sender, RoutedEventArgs e)
        {
            //Asztal asztal = client.GetTable(10001);
            //Console.WriteLine("table name is " + asztal.AsztalName);
            //Console.WriteLine("table X is " + asztal.AsztalX);
            //Console.WriteLine("table Y is " + asztal.AsztalY);
            //asztal.AsztalX = 20;
            //asztal.AsztalY = 20;
            //Console.ReadLine();
            //bool result = client.UpdateTable(asztal);
            //Console.WriteLine("update result is " + result.ToString());
            //Console.ReadLine();
            
            
            etterem = new EtteremGUI(this.client, this);
            //this.Close();
            etterem.Title = this.etteremNev;
            etterem.Show();
            this.Hide();

            //client.Open(); // kapcsolat megnyitása (nem szükséges)
            //Console.ReadKey();
            //Database1Entities de = new Database1Entities();
            List<Asztal> Asztalok = client.GetAllTables().ToList();
            //var Asztalok = de.Asztal;
            Console.WriteLine("Asztalok:");

            for (int i = 0; i < Asztalok.Count; i++)
            {
                Asztal asztal = Asztalok[i];
                Console.WriteLine("id = {0}, szelesseg = {1}, magassag = {2}, x = {3}, y = {4}, szam = {5}", asztal.AsztalID, asztal.AsztalSzelesseg, asztal.AsztalMagassag, asztal.AsztalX, asztal.AsztalY, asztal.AsztalSzam);
                //asztal.setX(asztal.getX() + 1);
                //Asztalok[i] = asztal;
            }

            //List<Asztal> asztalList = new List<Asztal>();
            //foreach (var asztal in Asztalok)
            //{
            //    asztalList.Add(asztal);
            //}
            //client.SetTables(asztalList);


            //client.SaveAllAsztals(Asztalok);
            
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            this.isClientInitialized = InitializeClient();
            if (!this.isClientInitialized)
            {
                MessageBox.Show("Nem érhető el a szerver!\nRészletes hibaüzenet: " + this.clientErrorException.Message, "Hiba", MessageBoxButton.OK, MessageBoxImage.Warning);
            }
            else
            {
                //List<FogyasztasiCikk> cikkek = this.client.GetAllFogyasztasiCikkek().ToList();
                //foreach (FogyasztasiCikk cikk in cikkek)
                //{
                //    System.Console.WriteLine(String.Format("ID = {0}, Név = {1}, Ár = {2}, Típus = {3}", cikk.FogyasztasiCikkID, cikk.FogyasztasiCikkNev, cikk.FogyasztasiCikkAr, cikk.FogyasztasiCikkTipus.ToString()));
                //}

                //cikkek[0].FogyasztasiCikkAr = 230.0f;
                //bool ret = this.client.UpdateFogyasztasiCikk(cikkek[0]);
                //System.Console.WriteLine("A frissítés eredménye: " + ret.ToString());

                //FogyasztasiCikk ujcikk = new FogyasztasiCikk();
                //ujcikk.FogyasztasiCikkNev = "új cikk";
                //ujcikk.FogyasztasiCikkAr = 999;
                //ujcikk.FogyasztasiCikkTipus = FogyasztasiCikkTipus.Etel;

                //ret = this.client.AddFogyasztasiCikk(ujcikk);
                //System.Console.WriteLine("A hozzáadás eredménye: " + ret.ToString());

                //ujcikk = new FogyasztasiCikk();
                //ujcikk.FogyasztasiCikkNev = "törölni";
                //ujcikk.FogyasztasiCikkAr = 9999;
                //ujcikk.FogyasztasiCikkTipus = FogyasztasiCikkTipus.Ital;

                //ret = this.client.AddFogyasztasiCikk(ujcikk);
                //System.Console.WriteLine("A hozzáadás eredménye: " + ret.ToString());

                //cikkek.Clear();
                //cikkek = this.client.GetAllFogyasztasiCikkek().ToList();
                //foreach (FogyasztasiCikk cikk in cikkek)
                //{
                //    System.Console.WriteLine(String.Format("ID = {0}, Név = {1}, Ár = {2}, Típus = {3}", cikk.FogyasztasiCikkID, cikk.FogyasztasiCikkNev, cikk.FogyasztasiCikkAr, cikk.FogyasztasiCikkTipus.ToString()));
                //}

                //ret = this.client.DeleteFogyasztasiCikk(cikkek[cikkek.Count - 1]);

                //System.Console.WriteLine("A törlés eredménye: " + ret.ToString());

                //cikkek.Clear();
                //cikkek = this.client.GetAllFogyasztasiCikkek().ToList();
                //foreach (FogyasztasiCikk cikk in cikkek)
                //{
                //    System.Console.WriteLine(String.Format("ID = {0}, Név = {1}, Ár = {2}, Típus = {3}", cikk.FogyasztasiCikkID, cikk.FogyasztasiCikkNev, cikk.FogyasztasiCikkAr, cikk.FogyasztasiCikkTipus.ToString()));
                //}

                //Asztal[] asztalok = this.client.GetAllTables();

                //List<Arak> tesztArak = new List<Arak>();
                //tesztArak.Add(new Arak("Hagymás rostélyos", 2000));
                //tesztArak.Add(new Arak("Kóla", 200));
                //tesztArak.Add(new Arak("Húsleves", 600));

                //asztalok[0].AsztalTetelek = tesztArak.ToArray();

                //Guid rendelesID = this.client.Rendeles(asztalok[0]);
                //System.Console.WriteLine("A rendelés azonosítója: " + rendelesID.ToString());
                //System.Console.WriteLine("A számla xml-ben: " + this.client.Szamla(rendelesID));




            }
        }
    }
}
